import ENV_CONFIG from '@/env.js' //引入接口共用地址
import useUserStore from '@/store/user.js' //引入仓库，使用的是pinia
import {
	clearStorageSync,
	getStorageSync,
	toast,
	useRouter
} from '@/utils/utils.js';

const $useStore = useUserStore()
const request = (url, options) => {
	return new Promise((resolve, reject) => {
		let baseHeader = {}

		// 获取用户令牌
		baseHeader.Authorization = getStorageSync('token') || null
		
		// 设置请求头
		const header = baseHeader.Authorization === null ? {
			'Content-Type': 'application/json',
			...options.header // 可以传入额外的请求头参数

		} : {
			'Content-Type': 'application/json',
			...baseHeader,
			...options.header // 可以传入额外的请求头参数
		}
		// ⭐在发送请求之前执行拦截操作
		uni.request({
			url: url, //接收请求的API
			method: options.method || 'GET', //接收请求的方式,如果不传默认为GET
			data: options.data || {}, //接收请求的data,不传默认为空
			header: header, //接收请求的header
			async success(res) {
				// ⭐在这里处理接收到响应后处理响应数据
				// if (res.data.code != 0) {
				//   // 提示重新登录
				//   uni.$showMsg('请登录')
				//   useUserStore().userLogout()
				//   setTimeout(() => {
				//     uni.switchTab({
				//       url: '/pages/my/my'
				//     })
				//   }, 1000)
				// }
				if (res.data.status === 401) {
					clearStorageSync();
					await toast('您未登录，正在跳转登录...', 'none');
					useRouter(`/pages/login/login`, null, 'redirectTo');
					reject()
				}
				resolve(res.data) // 使用resolve将数据传递出去
			},
			fail: (err) => {
				reject(err)
			}
		})
	})
}

const http = {};

["options", "get", "post", "put", "head", "delete", "trace", "connect"].forEach(
	(method) => {
		http[method] = (url, data, options) =>
			request(url, {
				method,
				data,
				...options
			});
	}
);

export default http;